package Leetcode;

import base.ListNode;

/**
 * 给定一个已排序的链表的头head， 删除所有重复的元素，使每个元素只出现一次。返回已排序的链表。
 *
 * @Author piper
 * @Date 2019/10/24 2:05 下午
 */
public class 力扣83_删除排序链表中的重复元素 {

    /**
     * 直接法
     * 由于链表排过序，只需要比较当前节点和后面节点的值
     * 如果相等 更改当前节点next 使他跳过下一个节点
     */
    static ListNode deleteDuplicates(ListNode head) {
        if (head == null) {
            return null;
        }
        //定义一个指针 用以比较元素
        ListNode l = head;
        while (l.next != null) {
            if (l.val == l.next.val) {
                l.next = l.next.next;
            } else {
                l = l.next;
            }
        }
        //最后返回head指针 因为这个指针一直指向首节点
        //而l指针 指向很可能已经变了
        return head;
    }

    public static void main(String[] args) {
        ListNode a1 = new ListNode(1);
        ListNode a2 = new ListNode(1);
        ListNode a3 = new ListNode(2);
        ListNode a4 = new ListNode(3);
        ListNode a5 = new ListNode(4);
        ListNode a6 = new ListNode(4);
        a1.next = a2;
        a2.next = a3;
        a3.next = a4;
        a4.next = a5;
        a5.next = a6;

        ListNode listNode = deleteDuplicates(a1);
        System.out.println(listNode.val);
        while (listNode.next != null) {
            System.out.println((listNode = listNode.next).val);
        }
    }

}
